package cn.hinglo.gameclaw.data.controller;

import cn.hinglo.gameclaw.data.entity.Result;
import cn.hinglo.gameclaw.data.enums.ExceptionEnum;
import org.springframework.beans.factory.annotation.Autowired;

import javax.servlet.http.HttpServletRequest;

/**
 * @createTime: 2018/3/12
 * @author: HingLo
 * @description: 所有的请求(Action)的基类
 */
public class BaseController {


    @Autowired
    protected HttpServletRequest request;


    protected String getUserId(HttpServletRequest request) {
        return ((String) request.getAttribute("userId")).toLowerCase();
    }

    /**
     * 请求成功
     *
     * @param object 结果的对象
     * @return 响应结果
     */
    protected Result<Object> success(Object object) {
        return new Result<>(200, "操作成功", object);
    }


    /**
     * 默认成功的方法，不需要返回参数
     *
     * @return 响应结果
     */
    protected Result<Object> success() {
        return success(null);
    }


    /**
     * 请求失败，传入失败code,与信息
     *
     * @param code 响应吗
     * @param msg  消息提示
     * @return 响应结果
     */
    protected Result error(Integer code, String msg) {
        return new Result<>(code, msg, null);
    }

    /**
     * 错误信息，返回默认的-1 代码，提示信息自定义
     *
     * @param msg 消息提示
     * @return 响应结果
     */
    protected Result<Object> error(String msg) {
        return new Result<>(-1, msg, null);
    }

    /**
     * 重载error方法，传入一个枚举类型，
     *
     * @param exceptionEnum 枚举类型的错误对象
     * @return 响应结果
     */
    protected Result error(ExceptionEnum exceptionEnum) {
        return new Result<>(exceptionEnum.getCode(), exceptionEnum.getMessage(), null);
    }

    /**
     * 携带错误消息提示的结果
     *
     * @param bool 操作结果（True/False)
     * @param msg  错误就返回消息
     */
    protected Result result(boolean bool, String msg) {
        if (bool) {
            return success();
        } else {
            return error(msg);
        }
    }

    /**
     * 携带成功数据的消息结果
     *
     * @param bool 操作结果
     * @param msg  携带成功需要数据
     */
    protected Result result(boolean bool, Object msg) {
        if (bool) {
            return success(msg);
        } else {
            return error("操作失败");
        }
    }
}
